<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>

  <body>
    <script>
      /* forEach() 方法对数组的每个元素执行一次给定的操作 */
      function demoForEach() {
        var array1 = ["a", "b", "c"];

        array1.forEach(
          // 对每个元素执行一下给定操作
          // 该函数会被执行3次
          // 每次的item即当前元素 Index即其下标
          function (item, index) {
            //对每个元素都执行一下指定操作
            console.log(item, index);
          }
        );
      }

      /* 将数组中的每个元素映射为一个新元素 返回一个新数组 */
      function demoMap() {
        var bros = [
          { name: "第四军军长", hair: 100, level: 12 },
          { name: "财政大臣", hair: 100, level: 34 },
          { name: "大西瓜", hair: 100, level: 56 },
        ];

        /* 将每个bro元素【映射】为一个发量减半 level翻倍的新元素 形成一个新数组副本并返回*/
        var broPluses = bros.map(
          /* 操作函数依次作用于每个item */
          function (item, index) {
            //操作函数的返回值为item映射出来的新元素
            return {
              index: index + 1,
              name: item.name,
              hair: item.hair / 2,
              level: item.level * 2,
            };
          }
        );

        console.log("bros=", bros); //原来的数组没有变化
        console.log("broPluses=", broPluses);
      }
      //   demoMap();

      /* 从数组中过滤出符合条件的元素 返回一个新数组 */
      function demoFilter() {
        var words = ["cat", "dog", "chicken", "elephant", "crocodile", "bear"];

        //过滤出长度>6的单词
        const longWords = words.filter(
          // 元素进去 真假出来 返回真的元素得以通过过滤
          // 通过过滤的元素得以进入新数组longWords
          function (item, index) {
            return item.length > 6;
          }
        );

        console.log(words); //原始数据没有变化
        console.log(longWords); //["chicken", "elephant", "crocodile"]
      }

      /* 检测arr中是否每个元素都SuperOK 最终产生一个答案：或真或假 */
      function demoEvery() {
        var arr = [10, 1, 39, 29, 13];

        //测试是否每个元素都【为奇数】
        var everyItemIsSuperOK = arr.every(
          function (item, index) {
            console.log(index, item);
            return item % 2 === 1;
          });
        console.log("everyItemIsSuperOK", everyItemIsSuperOK);
      }
      //   demoEvery();

      /* 检测arr中是否有某些元素SuperOK 最终产生一个答案：或真或假 */
      function demoSome() {
        var arr = [10, 1, 39, 29, 13];

        // 是否有某些元素SuperOK
        var someItemIsSuperOK = arr.some(
          function (item, index) {
            console.log(index, item);

            //   superOK的标准是【奇数】
            //   return item % 2 === 1;

            //   superOK的标准是【超过40】
            return item > 40;
          });
        console.log("someItemIsSuperOK", someItemIsSuperOK);
      }
      //   demoSome();

      /* some/every 类比 与或短路 */
      function fn() {
        var flag = false;

        // 与短路： 条件A成立才执行条件B
        // flag && console.log("flag成立");
        // if(A){B}

        // 或短路：A成立时 B直接不看
        flag || console.log("flag不成立");
        // if(!A){B}

        console.log("game over");
      }
      fn()
    </script>
  </body>
</html>
